# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/8/17 0017 0:14
@Author : 测试开发工程师
@File : 3. 队列.py
@Software: PyCharm
============================
"""

"""
队列：

    顺序队列 ： 查找快
        普通队列
        优化队列
        循环队列
    
    链式队列 ： 查找慢


    队列二要素：
        头结点： 
            删除指定位置元素
            判断队列是否为空
        尾结点：
            指定新元素的插入位置
            通过尾节点判断队列是否满了，如果满了，就禁止插入
            判断队列是否为空
    阻塞队列：
        入队和出队可以等待
    并发队列：
        支持多线程的阻塞队列

"""


class Queue:

    def __init__(self, capacity) -> None:
        # 容量
        self.n = capacity
        # 数据
        self.items = [-1] * capacity
        # 头指针
        self.head = 0
        # 尾指针
        self.tail = 0

    # 入队
    def enqueue(self, item):
        if self.tail == self.n:
            return False
        self.items[self.tail] = item
        # 向后移动一个元素
        self.tail += 1

    # 出队
    def dequeue(self):
        if self.head == self.tail:
            return None
        value = self.items[self.head]
        self.head += 1
        return value


def test_queue():
    a = Queue(10)
    a.enqueue("10")
    a.enqueue("20")
    deque_item = a.dequeue()
    assert deque_item == "10"
    a.enqueue("30")
    assert a.items[a.head] == "20"
    assert a.items[a.tail - 1] == "30"


if __name__ == '__main__':
    test_queue()
